森.林木

Android 应用加固技术综述

原理

加壳原理

enter description here

加固的过程中需要三个对象:

  • 需要加密的Apk(源Apk)
  • 壳程序Apk(负责解密Apk工作)
  • 加密工具(将源Apk进行加密和壳Dex合并成新的Dex)

主要步骤:

  • 用加密算法对源Apk进行加密,形成加密的DEX文件
  • 将加密的DEX文件与壳Apk进行合并得到新的Dex文件
  • 用新的Dex文件替换壳程序中的dex文件,得到新的Apk。修改壳程序dex文件头中的checksum、signature 和file_size的信息,并且要附加加壳的apk的长度信息在dex文件中,以便我们进行解壳保证原来apk的正常运行。加完壳后整个文件的结构如下:
    enter description here

这个新的Apk叫作脱壳程序Apk,已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk,然后加载Apk,让其正常运行起来。

脱壳原理

enter description here

  • 通过反射置换android.app.ActivityThread 中的mClassLoader为加载解密出APK的DexClassLoader,该DexClassLoader一方面加载了源程序、另一方面以原mClassLoader为父节点,这就保证了即加载了源程序又没有放弃原先加载的资源与系统代码。

  • 找到源程序的Application,通过反射建立并运行。这里需要注意的是,我们现在是加载一个完整的Apk,让他运行起来,那么我们知道一个Apk运行的时候都是有一个Application对象的,这个也是一个程序运行之后的全局类。所以我们必须找到解密之后的源Apk的Application类,运行的他的onCreate方法,这样源Apk才开始他的运行生命周期。这里我们如何得到源Apk的Application的类呢?这个我们后面会说道。使用meta标签进行设置。

产品化方案

国内提供APK加固技术方案的第三方技术公司有:娜迦、爱加密、梆梆加固、360加固、百度加固、腾讯加固等。
功能概述及其使用

阿里聚安全 链接:http://jaq.alibaba.com/

  • 上传应用
  • 提供安全扫描(漏洞扫描、恶意代码扫描、仿冒应用扫描)
  • 可以从结果知道漏洞总数,如果是认证过的开发者,可以直接得知漏洞的具体位置。其中还有部分漏洞需要付费扫描。
  • 然后我们可以进行应用加固,其中分快速加固和多渠道加固,可以按需选择 加固包下载(应用需要重新签名)

腾讯云应用乐固 链接:https://www.qcloud.com/product/cr

  • 上传应用
  • 默认服务类型:
  • 应用加固
  • 漏洞检测
  • 渠道监控
  • 可选服务类型:
  • 适配分析(每天可以有一次)
  • 质量跟踪(即接入腾讯的bugly进行异常追踪)
  • 之后我们可以得到应用的基本信息、加固包、缺陷分析、应用检测
  • 选择下载加固包(应用需要重新签名)的同时还提供了签名及多渠道打包工具、自动加固工具的下载使用

360加固保 链接:http://jiagu.360.cn/

  • 上传应用
  • 提供加固基础服务:
  • DEX文件加密
  • 防二次打包
  • APK大小优化
  • 防DEX内存截取
  • 应用盗版检测
  • 加固数据分析服务
  • 可选增强服务:
  • 崩溃日志分析(即接入360的bug追踪)
  • 支持x86框架(约增大apk大小400k左右)

梆梆加固 链接:https://dev.bangcle.com/

  • 上传应用
  • 提供功能:安全评估(更多定制化的评估,需联系客户并且收费)、应用加固(认证过的开发者还提供:报告下载,多渠道打包)
  • 评估结果提供了风险的详情,位置及解决方案
  • 提供对加固后的包再进行快速评估
  • 选择下载加固包(应用需要重新签名)的同时还提供了加固工具的下载使用

爱加密 链接:http://safe.ijiami.cn/

  • 上传应用并直接执行加密.需要注意其中有一个选项:防止二次打包,请按需选择
  • 可以对加固后的包申请渠道检测,除了加固包的下载,还提供了签名工具的下载荐

对比分析

体积(体积小的为优):360 > 腾讯 > 爱加密 > 阿里 > 梆梆

兼容性: 阿里 > 腾讯 > 360 = 梆梆 > 爱加密

启动速度(时间短为优): 阿里 > 爱加密 > 360 = 梆梆 > 腾讯

漏洞: 腾讯 > 爱加密 > 360 > 梆梆 > 阿里

参考资料

http://blog.csdn.net/jiangwei0910410003/article/details/48415225
http://blog.csdn.net/u011216417/article/details/70307031
http://xhrong.github.io/attachments/基于Android平台的软件加固方案的设计与.pdf